//class Solution {
//public:
//    int maxSubarraySumCircular(vector<int>& nums) {
//        
//        int size = nums.size();
//        int max_ret = INT_MIN;
//        int min_ret = INT_MAX;
//        vector<int> dp_max(size + 1);
//        vector<int> dp_min(size + 1);
//        int sum = 0;
//        for (int i = 1; i <= nums.size(); i++) {
//            sum += nums[i - 1];
//            dp_max[i] = nums[i - 1] + max(0, dp_max[i - 1]);
//            dp_min[i] = nums[i - 1] + min(0, dp_min[i - 1]);
//            max_ret = max(max_ret, dp_max[i]);
//            min_ret = min(min_ret, dp_min[i]);
//        }
//        if (min_ret == sum)return max_ret;
//        return max(max_ret, sum - min_ret);
//
//    }
//};